package com.yuanfengerp.publicUtil;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtTokenUtil {
    //JWT（JSON Web Tokens）签名的密钥。
    // 在JWT中，签名密钥用于创建一个安全的签名，以确保Token的完整性和验证Token在传输过程中未被篡改。
    private String secretKey = "your_secret_key";

    // 生成JWT Token的方法
    public String generateToken(String username) {
        // 使用Jwts.builder()创建一个新的Token构建器
        return Jwts.builder()
                // 设置Token的主题（Subject），通常为用户名
                .setSubject(username)
                // 设置Token的签发时间（IssuedAt）
                .setIssuedAt(new Date(System.currentTimeMillis()))
                // 设置Token的过期时间（Expiration），这里设置为当前时间后的1小时
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24)) // 1 hour expiration
                // 使用HS256签名算法和密钥来签名Token
                .signWith(SignatureAlgorithm.HS256, secretKey)
                // 将Token压缩为紧凑的字符串形式
                .compact();
    }

    // 从JWT Token中获取用户名的方法
    public String getUserNameFromJwtToken(String token) {
        // 使用Jwts.parser()创建一个新的Token解析器，并设置签名密钥
        Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
        // 返回Token中的用户名
        return claims.getSubject();
    }
}

